class Person:
    # 带单下划线的私有属性，虽然可以，但是不建议外部直接访问
    _sex = 'male'
    # 带双下划线的私有属性，无法通过类的实例化对象访问。实际上触发了名称重整，__age会被重命名为_Person__age。
    __age = 18

    def __init__(self, name):
        self.name = name

    def get_age(self):
        return self.__age

    def __get_name(self):
        return self.name

    def get_name(self):
        # 不推荐这样写
        # return Person.__get_name(self)
        # 推荐这样写
        return self.__get_name()


try:
    print(Person._sex)
    print(Person.__age)
except AttributeError as e:
    print(e)

p1 = Person('Jonn')
try:
    print(p1._sex)
    print(p1.__age)
except AttributeError as e:
    print(e)

# 虽然可以，但不要用这种方式访问双下划线私有属性
print(p1._Person__age)
print(p1.get_age())

try:
    print(p1.__get_name())
except AttributeError as e:
    print(e)

print(p1._Person__get_name())
print(p1.get_name())

